package com.algorithm.example.queue.deque;

/**
 * <p>
 * 双端队列接口
 * </p>
 *
 * @author lzt
 * @version 1.0
 * @since 2024/1/27 12:00
 */
public interface Deque<E> {

    /**
     * 向队列头部插入值
     * @param e 待插入值
     * @return 成功返回true 否则false
     */
    boolean offerFirst(E e);

    /**
     * 向队列尾部插入值
     * @param e 待插入值
     * @return 成功返回true 否则false
     */
    boolean offerLast(E e);

    /**
     * 弹出队列头部的值，并移除
     * @return 返回弹出的值
     */
    E pollFirst();

    /**
     * 弹出队列尾部的值，并移除
     * @return 返回弹出的值
     */
    E pollLast();

    /**
     * 弹出队列头部的值，不移除
     * @return 返回弹出的值
     */
    E peekFirst();

    /**
     * 弹出队列尾部的值，不移除
     * @return 返回弹出的值
     */
    E peekLast();

    /**
     * 队列是否为空
     * @return 空返回true 否则返回false
     */
    boolean isEmpty();

    /**
     * 队列容量是否已满
     * @return 满返回true 否则返回false
     */
    boolean isFull();
}
